//先载入一个模块配置文件，成功后，再载入需要的模块
//Common中包含了一些通用函数，比如判断js文件是否存在等。
//注意Element中define(['vue']),所以对vue引用不能使用首字大写
require(['Resource/Script/requireJs/_require.config.js?v='+Math.random()],function(){
  require(['vue','Common','axios'],function(vue,Common,axios){
    //用来放置表单项的缓存,无法直接修改opt.data中的变量，所以通过这个缓存来修改
    var _FormItems_ = varTemplate.formItems;
    // var _FormRules_ = null;
    // var _FormAction_ = null;

    if(!varTemplate.row || Array.isArray(varTemplate.row)) {
      varTemplate.row = {};
    }
    var opt = {
        el: '#div1',
        // components:Common.userComponents,

        components:null,
        data: function() {
          return {
            //父窗体中的iframe组件的_uid
            uidParentComp : 0,
            //父窗体中的iframe组件
            compParent:null,
            //数据集的默认值，一般从php后台传入
            value : {},
            //sontpl中定义的函数集合
            callbacks : [],
            formItems : [],
            //当前记录，模板变量传入
            row : {},
            //回调接口集合
            callbacks:{},
          }
        },
        methods:{
          //控件值改变了修改记录的值
          handleInput : function(row,key,val){
            if(row[key]) row[key]=val;
            else {
              vue.set(row,key,val);
            }
            // row[item.name]=arguments[0]
          },
          //获得get参数
          getUrlKey : function(name) {
            var url = window.location.href;
            return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(url) || [, ""])[1].replace(/\+/g, '%20')) || null;
          },

          //调用callbacks中的方法
          //to do 加入参数
          doHandle : function(funcName) {
            // dump(this.callbacks);
            if(!this.callbacks[funcName]) {
              dump(`sontpl中未发现函数 ${funcName}`);
              return;
            }
            this.callbacks[funcName].apply(this);
          }
        },

        mounted : function() {
          //暴露变量，方便父页面获取
          window._objVue = this;

          this.uidParentComp = this.getUrlKey('uidParentComp');
          this.compParent = window.parent._ifrmComp[this.uidParentComp];

          this.row=varTemplate.row
          // dump(this.row);
          this.formItems=_FormItems_;
          // dump(this);

          //载入sonTpl
          Common.setSontpl.apply(this,[varTemplate]);
          // Common.setSontpl(varTemplate);
          // var _this = this;
          // require([_tplPath_+'/'+varTemplate.sonTpl],function(ev){
          //   _this.callbacks = ev;
          //   if(ev.main) {
          //     ev.main.apply(_this);
          //   }
          // },function(err){
          //   console.log('sontpl不存在')
          // });
        }
    };

    //开始处理components属性
    // _FormItems_ = varTemplate.formItems;
    // _FormRules_ = res.rules||null;
    // _FormAction_ = res.action||'';


    //根据表单项配置,设置默认值
    //父页面中传递过来一个默认值
    //子页面中会存在一个模板变量
    //字段定义中还有个默认值
    //需要合并，优先级依次降低
    var row = varTemplate.row;
    for(var i=0;_FormItems_[i];i++) {
      var key = _FormItems_[i].name;
      if(Common.isset(row,key)) continue;
      vue.set(row,key,_FormItems_[i].value);
    }
    // dump(varTemplate.row);

    //使用eval动态加载异步组件
    var temp = "";
    var items = _FormItems_;
    //下面被注释的代码导致引用地址的原始数据改变，出现了表单阻止错误的bug
    for(var i=0;items[i];i++) {
      temp = temp +`'${items[i].type}':resolve=>require(['_vue!pathComponent/${items[i].type}'], resolve),`;
    }
    opt.components = eval(`({${temp}})`);
    // dump(opt);
    new vue(opt);
  })
});


